<?php
class Dao {
	var $_dao=null;
	var $_memcache=null;
	var $config=null;
	public function __construct() {
		if(!$this->config){
			$this->config=load_conf("db");
		}
		$db_type=$this->config["db_type"];

		$this->_dao=$db_type::get_instance();
		
		$this->_dao->get_conn($this->config);
		if($this->config["is_mem"]){
			$this->_memcache=Mem::get_instance();
			$this->_memcache->mem_connect($this->config["mem_conf"]);
		}
		

	}
    
}



class Mysql{
	private $link;
	private $config;
	private static $_instance;

	public function __construct() {
		
  	}

	static function get_instance(){
		if(!(self::$_instance instanceof self)){
			self::$_instance = new self();
		}
		return self::$_instance;
	}


	public function get_conn($config){
		if (!$this->link = @mysql_connect($config['host'],$config['username'],$config['password'])) {
      		trigger_error('Error: Could not make a database link using ' . $config['username'] . '@' . $config['host']);
    	}
    	if (!mysql_select_db($config['database'], $this->link)) {
      		trigger_error('Error: Could not connect to database ' . $config['database']);
    	}
		
		mysql_query("SET NAMES 'utf8'", $this->link);
		//mysql_query("SET CHARACTER SET utf8", $this->link);
		//mysql_query("SET CHARACTER_SET_CONNECTION=utf8", $this->link);
		//mysql_query("SET SQL_MODE = ''", $this->link);
	}
	

  	public function query($sql) {
  		//echo $sql."<br/>";
		if(isset($_GET['debug']))
		{
			echo "<xmp>".$sql."</xmp>";
		}
		$resource = mysql_query($sql, $this->link);

		if ($resource) {
			if (is_resource($resource)) {
				$i = 0;
    	
				$data = array();
		
				while ($result = mysql_fetch_assoc($resource)) {
					$data[$i] = $result;
    	
					$i++;
				}
				
				mysql_free_result($resource);
				
				$query = new stdClass();
				$query->row = isset($data[0]) ? $data[0] : array();
				$query->rows = $data;
				$query->num_rows = $i;
				
				unset($data);

				return $query;	
    		} else {
				return true;
			}
		} else {
			trigger_error('Error: ' . mysql_error($this->link) . '<br />Error No: ' . mysql_errno($this->link) . '<br />' . $sql);
			exit();
    	}
  	}
	
	public function escape($value) {
		return mysql_real_escape_string($value, $this->link);
	}
	
  	public function countAffected() {
    	return mysql_affected_rows($this->link);
  	}

  	public function getLastId() {
    	return mysql_insert_id($this->link);
  	}	
	
	public function __destruct() {
		mysql_close($this->link);
	}


}


class Mem {

	private static $_instance;

	function __construct(){
	}
	
	static function get_instance(){
		if(!(self::$_instance instanceof self)){
			self::$_instance=new self();
			
		}
		return self::$_instance;
	}

	function mem_connect($options)
    {
        if (empty($options))
        {
            return false;
        }
        $this->_memcache = new Memcache;

        return $this->_memcache->connect($options['host'], $options['port']);
    }


    function mem_set($key, $value, $ttl = 1800)
    {
        return $this->_memcache->set($key, $value,0, $ttl);
    }

    function &mem_get($key)
    {
        $var = $this->_memcache->get($key);
        return $var;
    }


    function mem_clear()
    {
        return $this->_memcache->flush();
    }

    function mem_delete($key)
    {
        return $this->_memcache->delete($key);
    }

}
?>